package cn.z2huo.demo.mybatis.plus.service.optimisticlock;

import cn.z2huo.demo.mapper.system.OptimisticLockTestMBPMapper;
import cn.z2huo.demo.model.dataobject.lock.OptimisticLockTestMBPDO;
import cn.z2huo.demo.mybatis.plus.model.dto.lock.OptimisticLockTestDTO;
import com.baomidou.mybatisplus.core.conditions.update.LambdaUpdateWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

/**
 * <p>
 *
 * @author z2huo
 */
@Service
@RequiredArgsConstructor
public class OptimisticLockMBPTestServiceImpl implements OptimisticLockTestService {

    private final OptimisticLockTestMBPMapper optimisticLockTestMBPMapper;

    @Transactional
    @Override
    public void updateById(OptimisticLockTestDTO optimisticLockTestDTO) {
        Long id = optimisticLockTestDTO.getId();
        String name = optimisticLockTestDTO.getName();

        OptimisticLockTestMBPDO optimisticLockTestDO = optimisticLockTestMBPMapper.selectById(id);
//        OptimisticLockTestMBPDO optimisticLockTestDO = new OptimisticLockTestMBPDO();
        optimisticLockTestDO.setName(name);
        // 更新 name 字段
        LambdaUpdateWrapper<OptimisticLockTestMBPDO> updateWrapper = Wrappers.lambdaUpdate();
        updateWrapper.eq(OptimisticLockTestMBPDO::getId, id);
        int updateCount = optimisticLockTestMBPMapper.update(optimisticLockTestDO, updateWrapper);

        if (updateCount != 1) {
            throw new RuntimeException("更新失败");
        }
    }

    @Transactional
    @Override
    public void updateByIdWithRetry(OptimisticLockTestDTO optimisticLockTestDTO) {

    }

}
